package org.jeecg.modules.innerApi.leqiApi.requestVo;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;

/**
* @Create: 2023/11/13
* @Description：乐企发票票开具接口入参
*/
@Data
@EqualsAndHashCode(callSuper = false)
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(value = "乐企发票票开具接口入参")
public class LQInvoiceParam extends LQCommonParam implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
    * 发票代码
    */
    @ApiModelProperty(value = "发票代码")
    private String fpdm;
    /**
    * 发票代码
    */
    @ApiModelProperty(value = "发票代码")
    private String fphm;
    /**
    * 蓝字发票标志
    */
    @ApiModelProperty(value = "蓝字发票标志")
    private String lzfpbz;
    /**
     * 平台编号
     */
    @ApiModelProperty(value = "平台编号")
    private String ptbh;

    /**
     * 发票票种
     * 01：全电专
     * 02：全电普
     */
    @ApiModelProperty(value = "发票票种")
    private String fppz;
    /**
     * 特定要素
     */
    @ApiModelProperty(value = "特定要素")
    private String tdys;

    /**
     * 特定要素类型代码枚举
     */
    public static enum tdysDmEnum {
        cpyfp ("成品油发票","01"),
        xtfp ("稀土发票","02"),
        jzfwfp ("建筑服务发票","03"),
        hwysfwfp ("货物运输服务发票","04"),
        bdcxsfwfp ("不动产销售服务发票","05"),
        bdcjyzlfw ("不动产经营租赁服务","06"),
        dsccs ("代收车船税","07"),
        txf ("通行费","08"),
        lkysfwfp ("旅客运输服务发票","09"),
        ylfwzyfp ("医疗服务（住院）发票","10"),
        ylfwmzfp ("医疗服务（门诊）发票","11"),
        zcncpxsfp ("自产农产品销售发票","12"),
        tljhlhsgjfp ("拖拉机和联合收割机发票","13"),
        jdc ("机动车","14"),
        esc ("二手车","15"),
        ncpsgfp ("农产品收购发票","16"),
        gfsgfp ("光伏收购发票","17"),
        jyfp ("卷烟发票","18"),
        ;
        private final String desc;//描述
        private final String value;//值
        tdysDmEnum (String desc, String value) {
            this.desc = desc;
            this.value = value;
        }

        public String getDesc() {
            return desc;
        }

        public String getValue() {
            return value;
        }
    }

    /**
    * 区域代码
    */
    @ApiModelProperty(value = "区域代码")
    private String qyDm;
    /**
    * 差额征税类型代码
    */
    @ApiModelProperty(value = "差额征税类型代码")
    private String cezslxDm;

    /**
     * 差额征税类型代码枚举
     */
    public static enum cezslxDmEnum {
        cekp ("差额开票","01"),
        qekp ("全额开票","02");
        private final String desc;//描述
        private final String value;//值
        cezslxDmEnum (String desc, String value) {
            this.desc = desc;
            this.value = value;
        }

        public String getDesc() {
            return desc;
        }

        public String getValue() {
            return value;
        }
    }
    /**
     * 收购发票类型代码
     */
    @ApiModelProperty(value = "收购发票类型代码")
    private String sgfplxDm;

    /**
     * 差额征税类型代码枚举
     */
    public static enum sgfplxDmEnum {
        ncpsgfp ("农产品收购发票","01"),
        gfsgfp ("光伏收购发票","02"),
        escsgfp ("二手车收购发票","03");

        private final String desc;//描述
        private final String value;//值
        sgfplxDmEnum (String desc, String value) {
            this.desc = desc;
            this.value = value;
        }

        public String getDesc() {
            return desc;
        }

        public String getValue() {
            return value;
        }
    }
    /**
     * 出口业务适用政策代码
     */
    @ApiModelProperty(value = "出口业务适用政策代码")
    private String ckywsyzcDm;

    /**
     * 出口业务适用政策代码枚举
     */
    public static enum ckywsyzcDmEnum {
        tszc ("退税政策","01"),
        mszc ("免税政策","02"),
        zszc ("征税政策","03");

        private final String desc;//描述
        private final String value;//值
        ckywsyzcDmEnum (String desc, String value) {
            this.desc = desc;
            this.value = value;
        }
    }

    /**
     * 增值税即征即退代码
     */
    @ApiModelProperty(value = "增值税即征即退代码")
    private String zzsjzjtDm;

    /**
     * 增值税即征即退代码枚举
     */
    public static enum zzsjzjtDmEnum {
        rjcpfp ("软件产品发票","01"),
        zyzhlicpfp ("资源综合利用产品发票","02"),
        gdysfwfp ("管道运输服务发票","03"),
        yxdcrzzlfw ("有形动产融资租赁服务","04"),
        yxdcrzxshzlfwfp ("有形动产融资性售后回租服务发票","05"),
        xxqtclfp ("新型墙体材料发票","06"),
        flfdcpfp ("风力发电产品发票","07"),
        gffdcpfp ("光伏发电产品发票","08"),
        dmrjcpfp ("动漫软件产品发票","09"),
        fjwxlwfp ("飞机维修劳务发票","10"),
        hjfp ("黄金发票","11"),
        bjfp ("铂金发票","12"),
        ;

        private final String desc;//描述
        private final String value;//值
        zzsjzjtDmEnum (String desc, String value) {
            this.desc = desc;
            this.value = value;
        }
    }
    /**
     * 销售方纳税人识别号
     */
    @ApiModelProperty(value = "销售方纳税人识别号")
    private String xsfnsrsbh;
    /**
     * (销售方)名称
     */
    @ApiModelProperty(value = "(销售方)名称")
    private String xsfmc;
    /**
     * 销售方地址
     */
    @ApiModelProperty(value = "销售方地址")
    private String xsfdz;
    /**
     * 销售方电话
     */
    @ApiModelProperty(value = "销售方电话")
    private String xsfdh;
    /**
     * 销售方开户行
     */
    @ApiModelProperty(value = "销售方开户行")
    private String xsfkhh;
    /**
     * 销售方账号
     */
    @ApiModelProperty(value = "销售方账号")
    private String xsfzh;
    /**
     * 购买方纳税人识别号
     */
    @ApiModelProperty(value = "购买方纳税人识别号")
    private String gmfnsrsbh;
    /**
     * (购买方)名称
     */
    @ApiModelProperty(value = "(购买方)名称")
    private String gmfmc;
    /**
     * 购买方地址
     */
    @ApiModelProperty(value = "购买方地址")
    private String gmfdz;
    /**
     * 购买方电话
     */
    @ApiModelProperty(value = "购买方电话")
    private String gmfdh;
    /**
     * 购买方开户行
     */
    @ApiModelProperty(value = "购买方开户行")
    private String gmfkhh;
    /**
     * 购买方账号
     */
    @ApiModelProperty(value = "购买方账号")
    private String gmfzh;
    /**
     * 购买方经办人姓名
     */
    @ApiModelProperty(value = "购买方经办人姓名")
    private String gmfjbr;
    /**
     * 购买方经办人证件号码
     */
    @ApiModelProperty(value = "购买方经办人证件号码")
    private String jbrsfzjhm;
    /**
     * 购买方经办人联系电话
     */
    @ApiModelProperty(value = "购买方经办人联系电话")
    private String gmfjbrlxdh;
    /**
     * 合计金额
     */
    @ApiModelProperty(value = "合计金额")
    private BigDecimal hjje;
    /**
     * 合计税额
     */
    @ApiModelProperty(value = "合计税额")
    private BigDecimal hjse;
    /**
     * 价税合计
     */
    @ApiModelProperty(value = "价税合计")
    private BigDecimal jshj;

    /**
     * 收款银行名称
     */
    @ApiModelProperty(value = "收款银行名称")
    private String skyhmc;
    /**
     * 收款银行账号
     */
    @ApiModelProperty(value = "收款银行账号")
    private String skyhzh;
    /**
     * 结算方式
     */
    @ApiModelProperty(value = "结算方式")
    private String jsfs;

    /**
     * 结算方式枚举
     */
    public static enum jsfsEnum {
        xj ("现金","01"),
        yhzz ("银行转账","02"),
        pj ("票据","03"),
        dffzf ("第三方支付","04"),
        yfk ("预付卡","05"),
        qt ("其他","99"),
        ;

        private final String desc;//描述
        private final String value;//值
        jsfsEnum (String desc, String value) {
            this.desc = desc;
            this.value = value;
        }
    }
    /**
     * 应税行为发生地
     */
    @ApiModelProperty(value = "应税行为发生地")
    private String ysxwfsd;
    /**
     * 开票人
     */
    @ApiModelProperty(value = "开票人")
    private String kpr;
    /**
     * 开票人证件号码
     */
    @ApiModelProperty(value = "开票人证件号码")
    private String kprzjhm;
    /**
     * 开票人证件类型
     */
    @ApiModelProperty(value = "开票人证件类型")
    private String kprzjlx;
    /**
     * 对应蓝字发票号码
     */
    @ApiModelProperty(value = "对应蓝字发票号码")
    private String dylzfphm;

    /**
     * 红字确认信息单编号
     */
    @ApiModelProperty(value = "红字确认信息单编号")
    private String hzqrxxdbh;
    /**
     * 红字确认单uuid
     */
    @ApiModelProperty(value = "红字确认单uuid")
    private String hzqrduuid;

    /**
     * 备注
     */
    @ApiModelProperty(value = "备注")
    private String bz;

    /**
     * 发票明细
     */
    private List<LQInvoiceMxParam> fpmxList;
    /**
     * 附加要素
     */
    private List<LQInvoiceFjysParam> fjysList;
}
